平台建设过程中面临大数据选型(谁更快更强)、组合(谁做存储谁做计算)与组织管理等问题:比如选什么 who vs who?怎么搭配 who on who?迭代演进还是推倒重来?数据分散是集中到一个团队分析还是自治,历史原因可能多个组合共存。常见技术栈组合:开源常见技术栈组合:
Iceberg+S3+Starrocks+Flink
HDFS+Alluxio+Spark+Trino
HDFS+Hive+GreenPlum
Minio+LakeFS+Marquez+Trino
举个具体的例子,在存储和计算的组合上,根据研发的习惯可以采用Hive on Spark,也可以选择Spark on hive(依赖hive metastore),表现为上层谁作为查询语言的表达和解析优化,谁作为执行引擎或者catalog存储,根据团队的使用习惯以及历史发展甚至会有多个集群、多种版本共存,数据在平台之间通过集成或者计算框架的Source/Sink IO直接读写,中间经历各种序列化、反序列化的过程。我们所服务的某互联网搬历史就遗留统计、算法、广告三个集群,分别采用了Azkaban、Crontab、Oozie作为调度框架,多个集群数据的存储和计算之间血缘隐含复杂的依赖关系,缺少统一的产品或者方法再继续运营,客户最终选择重构并迁移到阿里大数据平台架构。
“A data fabric and a data mesh both provide an architecture to access data across multiple technologies and platforms, but a data fabric is technology-centric, while a data mesh focuses on organizational change”简单说,二者都是为了解决跨技术栈和平台的数据接入和分析问题,让数据还保留在原来的地方,而不是集中到一个平台或者领域。Data fabric是以技术为中心,data mesh聚焦于方法论、组织协同上的变化。
概念分析
Data Fabric
概念
“Conceptually, a big data fabric is essentially a metadata-driven way of connecting a disparate collection of data tools that address key pain points in big data projects in a cohesive and self-service manner. Specifically, data fabric solutions deliver capabilities in the areas of data access, discovery, transformation, integration, security, governance, lineage, and orchestration. ”
“In short, while the data fabric seeks to build a single, virtual management layer atop distributed data, the data mesh encourages distributed groups of teams to manage data as they see fit, albeit with some common governance provisions.”Data fabric目标是在异构分布式数据平台基础上建立单体统一的虚拟数据管理层,data mesh鼓励分布式的组织去管理自己的数据,领域内自闭环,基于data product对外提供服务。“So instead of building a complex set of ETL pipelines to move and transform data to specialized repositories where the various communities can analyze it, the data is retained in roughly its original form, and a series of domain-specific teams take ownership of that data as they shape the data into a product.”可以认为Data Mesh就是数据分析领域的“微服务”,在应用开发对应微服务的ServiceMesh理念有共同点,解决单体应用开发、部署、扩容等问题,微服务也为不同的服务节点所选择的语言提供一定的灵活性,应用之间通过API来通信,实现Service Mesh服务编排需要的技术组件包括可选的Service Discovery、API Gateway、Spring Framework、Docker、SideCar等。Data Mesh也是一种分布式大数据分析方法论,避免开发复杂的ETL将数据全量同步到某个数据仓库,而是根据需求选择不同的self-serve大数据技术与其场景匹配。旨在提供更灵活的自治的数据分析能力,让数据保留原始形态,提高分析实效性需求的响应速率,在需要Cross-Domain分析的情况下将数据编排起来,最大化利用原Data Product的价值,基于联合计算联合分析,或者通过编排将数据在各个域的分析驱动起来。分布式data mesh的四个主要特征:
Data Mesh 是微服务与单体架构的区别,从方法论层面DataMesh与数据中台的对比,治理过程是自下而上,在方法论层面与数据中台可以互补。“ top-down style of management that organizations have tried to impose on data lakes has been a failure. The data mesh tries to re-imagine that ownership structure in a bottoms-up manner”Data Fabric是与WareHouse、DataLake、LakeHouse等技术类似的概念,可以认为是第X代的DataPlatform,一种新的magic。Data Fabric侧重技术,通过各种组件构建统一元数据、联邦计算引擎、智能的数据编排消费探查工具实现面向业务人员的统一开发和管控平台,数据也是分散在各个存储计算引擎,从技术上也可以作为支撑Data Mesh的一种Self serve数据平台底座。两者并不冲突,体现方法论和技术的结合。Data Fabric&Mesh 组合Data Mesh可以建设在Fabric单体虚拟层之上,底座在技术上解决元数据、数据目录、联邦计算、湖仓等一体化开发运营能力,上层基于方法论实现数据的服务化、跨域的编排与分析,在没有比较完美的Data Fabric数据产品之前,可以通过现有的数据平台组合实现Mesh架构落地效果,这种情况下Data Mesh也需要额外建设跨域的全链路大数据的观测、元数据采集、统一服务目录、DataProduct的消费管理能力以及跨域联合计算的技术能力,但主要的业务数据分析计算过程不需要侵入到每个Domain的数据平台之中,数据依然主要在自己的Self-Serve Data Platform计算,各领域保持自治,上层进行相对轻量级的聚合分析。
什么情况应该避免用DataMesh
小团队,数据规模和数据域都比较少
高内聚的单体平台(比如SAP、DataPhin)满足需求
实效性要求高(网格化的数据通过CDC类实时的集成和计算也可以保证低延时)
Gartner怎么看
“Data mesh is obsolete before plateau,data fabric 还有5-10年才能成熟”二者依赖的基础技术需要几年时间才能成熟,相比起来Data Mesh出现时间较短,业界也有出现Data Mesh碰瓷Data Fabric的说法,二者的理念不同也会造成一些冲突,我们能认为二者可以在技术和方法论层面进行互补。
以DBT为例,上文提到过Data Mesh可以通过dbt+snowflake的形式构建,dbt作为统一的开发管理层,实现类似软件开发过程中的software enginerring、package management、macros、hooks 以及通过incremental materialization实现的 DAG level optimization能力。目标是提高代码模块的复用性,通过select语义以及ref 引用构建module的定义和关联关系,compile生成目标warehouse sql提交给引擎运行,但dbt开发moddular data model使用的SQL并不是一种统一的表达形式,而是所选择的warehouse自身的dialect,数据的处理不会离开sql运行的存算引擎。dbt sn't actually Magic. your data is not processed outside of your warehouse.dbt实现了snowflake、redshift、bigquery等平台的adapter,作用于macros和compile的过程,数据的计算完全在底层引擎内执行,dbt控制代码的复用、执行过程。而支持联合计算的比如trino或者StarRocks提供了统一的SQL支持跨多种数据源和计算引擎的查询,但Trino实现的是各种数据源的connector,数据会离开原来的位置在上层引擎进行,二者有很大的区别。
通过上文的catalog、format、lineage、sql的表达几种技术要素方案的讨论,可以看到这些图长得都差不多,中间有一层抽象成统一的XX,实现Fabric的架构前提要把所有的点对点的集成都屏蔽掉,可以依赖以上的一些产品进行组合、扩展集成,拼装成一层虚拟的Virtual Layer。而目前各种适配和统一还只存在于技术要素局部,宏观上大数据产品的异构还是常态,为了追求计算效率计算引擎通常与存储会避免通过中间层的额外做一层转换。更可行的是在某个引擎作为基准来扩展支持更广泛的数据源、数据格式和元数据,屏蔽底层其他种类的WareHouse或者数据湖的差异,现在比较流行的湖仓一体概念,可以看做是轻量化的Fabric实现,实现Catalog层面的统一,比如MaxCompute可以直接通过DLF或者对Hive MS的适配实现对外部数据湖、数仓的联合计算。Data Fabric目标是打造一个完整的虚拟层,创造一种新的魔法,基于同一的各种抽象开展数据工程,但这些统一的适配工作需要大量的工作,目前还没有统一的语义的抽象能够兼容所有的引擎,一些比较个性化的优化器、hint、存储格式和压缩算法、物化与虚拟化的技术都会导致通用表达无法下推到底层的引擎,专业性与通用性一定是冲突的,需要进行两层抽象,过度抽象可能会导致轮子以低功率运行,无法发挥底层引擎的优势。从可行性角度,Fabric可以在有限的存、算、调度组件上可行,联合Data Mesh实现最终的架构效果,Trino 2022 Summit也提到“Elevating Data Fabric to Data Mesh: solving data needs in hybrid data lakes”,通过trino跨引擎、跨实例组合出Fabric的架构特点,并向Data Mesh的演进,未来支撑Fabric的组件也会持续出现。当前阶段各数据平台更多聚焦打造自己的核心能力,并兼顾对于外部优秀的元数据、调度、存储等系统的适配,体现存算分离的基础上让自己的生存空间更大,同时标准化自己的扩展能力,开放Adapter的逻辑给社区,持续丰富其对外的各种适配。实现Data Mesh相对来说要更灵活一些,不强求在统一的技术栈进行数据工程开发,数据在原地的同时,技术栈以及开发的习惯可以保持自治,二者组合在跨数据湖的集群实例上增加新的相对独立的统一元数据中心和联邦计算能力,让DataProduct之间以类似微服务的API的形式流转起来,支撑跨域的数据应用。